/**
 * Repositorio pagamento com os principais metodos
 * 
 * @author			Paulo Lima
 * @corporation 	TeckSoft 2014
 * @project 		Araujo Seguros
 * @version 		1.0 
 * @since			Release 1  05/03/2014
 */
package repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import models.Pagamento;
import util.ConnectionFactory;

public class RepositorioPagamento implements IRepositorioPagamento {

	// ---------------------------------------------------------------------------------
	public boolean inserirPagamento(Pagamento pagamento) throws SQLException {
		String sql = "insert into pagamento values (?,?,?,?,?,?,?,?,?,?,?,?,?)";

		try {
			Connection conIntranet = new ConnectionFactory()
					.getConnection();

			PreparedStatement stm1 = (PreparedStatement) conIntranet
					.prepareStatement(sql);

			stm1.setInt(1, pagamento.getId());
			stm1.setString(2, pagamento.getTitular());
			stm1.setString(3, pagamento.getNumeroCartao());
			stm1.setString(4, pagamento.getBanco());
			stm1.setString(5, pagamento.getAgencia());
			stm1.setString(6, pagamento.getFormaPagamento());
			stm1.setString(7, pagamento.getNumeroParcela());
			stm1.setString(8, pagamento.getPremioTotal());
			stm1.setString(9, pagamento.getDataPagamento());
			stm1.setString(10, pagamento.getContaCorrente());
			stm1.setString(11, pagamento.getValidadeCartao());
			stm1.setString(12, pagamento.getCodigoSeguranca());
			stm1.setInt(13, pagamento.getMelhorDia());
			stm1.execute();
			stm1.close();
			conIntranet.close();
			return true;

		} catch (Exception e) {
			return false;
		}
	}

	// ---------------------------------------------------------------------------------
	public boolean removerPagamento(Pagamento pagamento) throws SQLException {

		String sql = "DELETE FROM pagamento WHERE id=?";

		try {

			Connection conIntranet = new ConnectionFactory()
					.getConnection();

			PreparedStatement stm1 = (PreparedStatement) conIntranet
					.prepareStatement(sql);

			stm1.setInt(1, pagamento.getId());
			stm1.execute();
			stm1.close();
			conIntranet.close();
			return true;

		} catch (Exception e) {

			return false;
		}

	}

	// ---------------------------------------------------------------------------------
	public boolean atualizarPagamento(Pagamento pagamento) throws SQLException {
		String sql = "UPDATE pagamento SET "
				+ "titular=?, numero_cartao=?, banco=?, agencia=?, forma_pagamento=?, "
				+ "numero_parcela=?, premio_total=?, data_pagamento=?, conta_corrente=?, validade_cartao=?, "
				+ "codigo_seguranca=?, melhor_dia=? WHERE id=?";

		try {

			Connection conIntranet = new ConnectionFactory()
					.getConnection();

			PreparedStatement stm1 = (PreparedStatement) conIntranet
					.prepareStatement(sql);

			stm1.setString(1, pagamento.getTitular());
			stm1.setString(2, pagamento.getNumeroCartao());
			stm1.setString(3, pagamento.getBanco());
			stm1.setString(4, pagamento.getAgencia());
			stm1.setString(5, pagamento.getFormaPagamento());
			stm1.setString(6, pagamento.getNumeroParcela());
			stm1.setString(7, pagamento.getPremioTotal());
			stm1.setString(8, pagamento.getDataPagamento());
			stm1.setString(9, pagamento.getContaCorrente());
			stm1.setString(10, pagamento.getValidadeCartao());
			stm1.setString(11, pagamento.getCodigoSeguranca());
			stm1.setInt(12, pagamento.getMelhorDia());
			stm1.setInt(13, pagamento.getId());
			stm1.execute();
			stm1.close();
			conIntranet.close();
			return true;

		} catch (Exception e) {
			return false;
		}
	}

	// ---------------------------------------------------------------------------------
	public List<Pagamento> listarPagamento() throws SQLException {

		ArrayList<Pagamento> pagamentoDB = new ArrayList<>();
		Pagamento pagamento;
		String sql = "SELECT * FROM pagamento";

		try {
			Connection conIntranet = new ConnectionFactory()
					.getConnection();
			PreparedStatement stm1 = (PreparedStatement) conIntranet
					.prepareStatement(sql);
			ResultSet rs1 = stm1.executeQuery();

			while (rs1.next()) {

				pagamento = new Pagamento();
				pagamento.setId(rs1.getInt(1));
				pagamento.setTitular(rs1.getString(2));
				pagamento.setNumeroCartao(rs1.getString(3));
				pagamento.setBanco(rs1.getString(4));
				pagamento.setAgencia(rs1.getString(5));
				pagamento.setFormaPagamento(rs1.getString(6));
				pagamento.setNumeroParcela(rs1.getString(7));
				pagamento.setPremioTotal(rs1.getString(8));
				pagamento.setDataPagamento(rs1.getString(9));
				pagamento.setContaCorrente(rs1.getString(10));
				pagamento.setValidadeCartao(rs1.getString(11));
				pagamento.setCodigoSeguranca(rs1.getString(12));
				pagamento.setMelhorDia(rs1.getInt(13));
				pagamentoDB.add(pagamento);

			}
			rs1.close();
			stm1.close();
			conIntranet.close();

		} catch (Exception e) {
			new SQLException();

		}

		return pagamentoDB;
	}

	// ---------------------------------------------------------------------------------
	public List<Pagamento> buscarPagamentoForma(String chave)
			throws SQLException {

		ArrayList<Pagamento> pagamentoDB = new ArrayList<>();
		Pagamento pagamento;

		String sql = "SELECT * FROM pagamento  WHERE forma_pagamento LIKE '"
				+ chave + "%'";

		try {
			Connection conIntranet = new ConnectionFactory()
					.getConnection();
			PreparedStatement stm1 = (PreparedStatement) conIntranet
					.prepareStatement(sql);
			ResultSet rs1 = stm1.executeQuery();

			while (rs1.next()) {

				pagamento = new Pagamento();
				pagamento.setId(rs1.getInt(1));
				pagamento.setTitular(rs1.getString(2));
				pagamento.setNumeroCartao(rs1.getString(3));
				pagamento.setBanco(rs1.getString(4));
				pagamento.setAgencia(rs1.getString(5));
				pagamento.setFormaPagamento(rs1.getString(6));
				pagamento.setNumeroParcela(rs1.getString(7));
				pagamento.setPremioTotal(rs1.getString(8));
				pagamento.setDataPagamento(rs1.getString(9));
				pagamento.setContaCorrente(rs1.getString(10));
				pagamento.setValidadeCartao(rs1.getString(11));
				pagamento.setCodigoSeguranca(rs1.getString(12));
				pagamento.setMelhorDia(rs1.getInt(13));
				pagamentoDB.add(pagamento);

			}
			rs1.close();
			stm1.close();
			conIntranet.close();

		} catch (Exception e) {

			new SQLException();

		}

		return pagamentoDB;
	}

	// ---------------------------------------------------------------------------------
	public int ultimoIdPagamento() throws SQLException {

		String sql = "SELECT MAX(id) FROM pagamento";
		int idBD = 0;

		try {
			Connection conIntranet = new ConnectionFactory()
					.getConnection();
			PreparedStatement stm1 = (PreparedStatement) conIntranet
					.prepareStatement(sql);
			ResultSet rs1 = stm1.executeQuery();

			rs1.next();
			idBD = rs1.getInt(1);
			rs1.close();
			stm1.close();
			conIntranet.close();

		} catch (Exception e) {
			new SQLException();
		}

		return idBD;
	}

	// ---------------------------------------------------------------------------------
	public Pagamento retornaPagamento(int id) throws SQLException {

		Pagamento pagamento;

		String sql = "SELECT * FROM pagamento  WHERE id = " + id + "";

		try {
			Connection conIntranet = new ConnectionFactory()
					.getConnection();
			PreparedStatement stm1 = (PreparedStatement) conIntranet
					.prepareStatement(sql);
			ResultSet rs1 = stm1.executeQuery();

			while (rs1.next()) {

				pagamento = new Pagamento();
				pagamento.setId(rs1.getInt(1));
				pagamento.setTitular(rs1.getString(2));
				pagamento.setNumeroCartao(rs1.getString(3));
				pagamento.setBanco(rs1.getString(4));
				pagamento.setAgencia(rs1.getString(5));
				pagamento.setFormaPagamento(rs1.getString(6));
				pagamento.setNumeroParcela(rs1.getString(7));
				pagamento.setPremioTotal(rs1.getString(8));
				pagamento.setDataPagamento(rs1.getString(9));
				pagamento.setContaCorrente(rs1.getString(10));
				pagamento.setValidadeCartao(rs1.getString(11));
				pagamento.setCodigoSeguranca(rs1.getString(12));
				pagamento.setMelhorDia(rs1.getInt(13));
				return pagamento;

			}
			rs1.close();
			stm1.close();
			conIntranet.close();
		} catch (Exception e) {
			new SQLException();
		}

		return null;
	}
	// ---------------------------------------------------------------------------------
}
